//
//  StatusListViewModel.swift
//  SNS
//
//  Created by ios on 15/12/19.
//  Copyright © 2015年 WU. All rights reserved.
//

import UIKit
import SVProgressHUD
import SDWebImage

class StatusListViewModel: NSObject {
    
    //since_id实现下拉刷新 新的微博的字段
    class func loadHomePageData(since_id: Int64,max_id: Int64,finished: (statuses: [Status]?) -> () ) {
        //实现网络请求
        //get请求
        let urlString = "2/statuses/home_timeline.json"
        //判断token是否为空
        guard let token = UserAccountViewModel().token else {
            print("token为空")
            SVProgressHUD.showInfoWithStatus("请重新登陆")
            return
        }
        var parameters = ["access_token" : token]
        //判断since_id 是否大于0
        if since_id > 0 {
            parameters["since_id"] = "\(since_id)"
        }
        if max_id > 0 {
            parameters["max_id"] = "\(max_id - 1)"
        }
        NetworkTools.sharedTools.requestJSONDict(.GET, urlString: urlString, parameters: parameters) { (dict, error) -> () in
            if error != nil {
                //执行失败的回调的
                SVProgressHUD.showInfoWithStatus("您的网络正在睡觉,请稍后...")
                finished(statuses: nil)
                return
            }
            
            //请求成功
            if let array = dict!["statuses"] as? [[String : AnyObject]] {
                //                    print(array)
                //TODO: 遍历数组中 所有的字典 做字典转模型的操作
                var list = [Status]()
                for item in array {
                    let s = Status(dict: item)
                    list.append(s)
                }
                
                
                //下载所有的单张图片 下载完图片之后再进行回调
                cacheStatusImage(list,finished: finished)
                //执行成功的回调
                //                finished(statuses: list)
            }
        }
    }
    
    
    class func cacheStatusImage(list: [Status],finished: (statuses: [Status]?) -> () ) {
        //下载所有的单张图片
        //遍历数组
        if list.count == 0 {
            //一定要执行回调
            finished(statuses: list)
            return
        }
        
        //创建群组对象  buffer  池子  将所有需要监听的异步任务放入到任务池中
        let group = dispatch_group_create()
        for s in list {
            if let urls = s.pictureULRs where urls.count != 1 {
                //不是单张图片
                //跳出本次循环
                continue
            }
            //下载单张图片 等待所有的单张图片下载完毕之后再进行回调
            //如何监听所有的异步任务完成  群组异步
            //在下载之前  将异步任务  添加到任务池
            //入组  +1
            dispatch_group_enter(group)
            SDWebImageManager.sharedManager().downloadImageWithURL(s.pictureULRs?.last, options: [], progress: nil, completed: { (_, _, _, _, _) -> Void in
                print("单张图片下载成功")
                //异步任务完成之后  必须出组  入组和出组 是一一对应  有入就必须有出  -1
                dispatch_group_leave(group)
            })
        }
        //群组任务监听 在任务池中 对应的任务数量为 0 的时候 会触发 监听事件
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            //完成回调
            print("所有的图片下载完毕")
            finished(statuses: list)
        }
        
    }
    
    
    
    
    
    
    
}
